Many current products and services can be customized by a customer before being purchased. For example, computer systems typically include many possible options and configurations that can be specifically selected or configured by the customer. Other examples of highly configurable products and services include telephone switching systems, airplanes, automobiles, mobile telephone services, insurance policies, and computer software.
Product and service providers typically provide a “product configurator” that allows a customer or sales engineer to interact with a computer in order to customize and configure a solution by selecting among optional choices. Some known product configurators are constraint-based. For these configurators, constraints are enforced between optional choices, allowing the user to select the choices they want, while validating that the resulting set of user choices is valid.
Some known constraint-based configurators are not fully “interactive” because they function as batch systems in which all of the user choices are initially collected and then checked for validity as a batch. Other known configurators, when receiving a user choice, propagate the user choice through its constraint network. However, a problem arises in these known systems when a user wishes to remove or change prior selections during the “choosing” process. In known systems, this will likely cause a removal of all prior selections and likely requires a restart of the entire configuration process and then the re-assertion of all choices minus that choice that is to be removed. This causes the user to have to essentially start over, or at a minimum slows down the processing, thus diminishing the interactive experience. Further, these known systems do not easily show the user the effect of each selection on further selections since the configuration is not determined until all selections are made.